package com.bookrecomm.service;

import com.bookrecomm.entity.Comment;
import com.bookrecomm.vo.CommentVO;
import com.bookrecomm.vo.PageVO;
import org.springframework.data.domain.Pageable;

/**
 * 评论服务接口
 * 定义评论相关的业务逻辑方法
 */
public interface CommentService {

    /**
     * 根据ID查询评论
     * @param id 评论ID
     * @return 评论信息
     */
    CommentVO findById(Long id);

    /**
     * 根据图书ID查询评论列表
     * @param bookId 图书ID
     * @param pageable 分页参数
     * @return 分页评论列表
     */
    PageVO<CommentVO> findByBookId(Long bookId, Pageable pageable);

    /**
     * 根据用户ID查询评论列表
     * @param userId 用户ID
     * @param pageable 分页参数
     * @return 分页评论列表
     */
    PageVO<CommentVO> findByUserId(Long userId, Pageable pageable);

    /**
     * 添加评论
     * @param comment 评论信息
     * @return 添加后的评论信息
     */
    CommentVO addComment(Comment comment);

    /**
     * 回复评论
     * @param parentId 父评论ID
     * @param comment 评论信息
     * @return 添加后的评论信息
     */
    CommentVO replyComment(Long parentId, Comment comment);

    /**
     * 更新评论
     * @param id 评论ID
     * @param comment 评论信息
     * @return 更新后的评论信息
     */
    CommentVO updateComment(Long id, Comment comment);

    /**
     * 删除评论
     * @param id 评论ID
     * @return 是否删除成功
     */
    boolean deleteComment(Long id);

    /**
     * 点赞评论
     * @param id 评论ID
     * @param userId 用户ID
     * @return 更新后的评论信息
     */
    CommentVO likeComment(Long id, Long userId);

    /**
     * 取消点赞评论
     * @param id 评论ID
     * @param userId 用户ID
     * @return 更新后的评论信息
     */
    CommentVO unlikeComment(Long id, Long userId);
}
